// 给你一个下标从 0 开始的整数数组 nums ，
// 请你找出一个下标从 0 开始的整数数组 answer ，其中：
// answer.length == nums.length
// answer[i] = |leftSum[i] - rightSum[i]|
// 其中：
// leftSum[i]是数组nums中下标i左侧元素之和。如果不存在对应的元素，leftSum[i] = 0 。
// rightSum[i]是数组nums中下标i右侧元素之和。如果不存在对应的元素，rightSum[i] = 0 。
// 返回数组 answer 。

// 示例 1：
// 输入：nums = [10,4,8,3]
// 输出：[15,1,11,22]
// 解释：数组leftSum为[0,10,14,22]且数组rightSum为[15,11,3,0] 。
// 数组 answer为[|0 - 15|,|10 - 11|,|14 - 3|,|22 - 0|] = [15,1,11,22] 。

// 示例 2：
// 输入：nums = [1]
// 输出：[0]
// 解释：数组leftSum为[0]且数组rightSum为[0] 。
// 数组 answer 为 [|0 - 0|] = [0] 。

// int* leftRightDifference(int* nums, int numsSize, int* returnSize){}

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
                                   
int *leftRightDifference(int *nums, int numsSize, int *returnSize)
{
    if (numsSize == 0)
    {
        *returnSize = 0;
        return NULL;
    }

    int *answer = (int *)malloc(sizeof(int) * numsSize);
    if (answer == NULL)
    {
        return NULL;
    }

    int *leftSum = (int *)calloc(numsSize, sizeof(int));
    int *rightSum = (int *)calloc(numsSize, sizeof(int));
    if (leftSum == NULL || rightSum == NULL)
    {
        free(answer);
        free(leftSum);
        free(rightSum);
        return NULL;
    }

    leftSum[0] = 0;
    for (int i = 1; i < numsSize; i++)
    {
        leftSum[i] = leftSum[i - 1] + nums[i - 1];
    }

    rightSum[numsSize - 1] = 0;
    for (int i = numsSize - 2; i >= 0; i--)
    {
        rightSum[i] = rightSum[i + 1] + nums[i + 1];
    }

    for (int i = 0; i < numsSize; i++)
    {
        answer[i] = abs(leftSum[i] - rightSum[i]);
    }

    *returnSize = numsSize;
    free(leftSum);
    free(rightSum);
    return answer;
}

int main()
{
}
